// 中间件介绍和使用
// 1. 是一个函数
// 2. err, req, res, next -> function

// 中间件级别
// 1. app 级别
//  1. 注册的时候一定是最顶级
//  2. app.use -> api 去加载进来
//  3. static 
// 2. router 级别
// 3. 异常处理（app 级别）
// 4. 

const express = require( 'express' );

const app = new express();

const route = require( './router/index' );

function demo_middleware( err, req, res, next ){
  // 1. err 异常
  // 2. 处理一下业务功能， 然后转交控制权 next
  // 3. 响应请求 -> 结束响应 -> 当做路由的处理函数 
}

function valid_name_middleware( req, res, next ){
  const { name } = req.query
  if( !name || !name.length ){
    res.json({
      message: '缺少name参数'
    });
  }else{
    next();
  }
}

// 全局拦截
// app.all( '*', valid_name_middleware );

app.get( '/test', valid_name_middleware, (req, res) => {
  res.json({
    message: 'test'
  })
})

// 内置中间件
// 1. express.static
// 2. express.json
// 3. urlencoded

// 第三方中间件
// cookie-parser

app.use( 
  express.static( 'static', {
    extensions: [ 'html', 'htm' ]
  }) 
);

// 可以配置父级路由
app.use( '/router', route );

app.listen( 8080, () => {
  console.log( 'Server Start Successful 127.0.0.1:8080' );
})

